Sprytny sposób na reset w C64 i nie tylko

Gohanks

Użytkownicy C64 od zawsze mieli z tym komputerem jedną, często dającą się we znaki bolączkę – brak przycisku reset. Z pomocą przychodziły drobne modyfikacje, wszelakie kartridże oraz inne, mniej lub bardziej bezpieczne wynalazki. O każdym z rozwiązań można by długo dyskutować, lecz jedno z nich, dość nietypowe, wpadło mi w oko i postanowiłem je zastosować w swoim zmodyfikowanym C64C.

Mowa tu o małym projekcie, który znalazłem buszując po stronach tematycznych. Jego autor sprytnie wykorzystał tani i łatwo dostępny układ z mikrokontrolerem Atmegi – Arduino Pro Mini. Oryginalny artykuł znaleźć możecie pod adresem http://www.breadbox64.com/blog/switchless-reset-mod/, jednak ja przedstawię Wam wersję z kilkoma usprawnieniami, które dodałem.

Zasada działania jest prosta. Układzik programujemy tak, żeby zależnie od sygnałów wejściowych (w tym wypadku wciśnięcia klawisza Restore) mikrokontroler wysterował odpowiednie stany logiczne na płycie C64, powodując warm lub cold reset oraz zmianę stanu na szynie adresowej układu EPROM, jeśli taki posiadamy.

Uwaga! Zanim chwycisz za lutownicę i wesoło postanowisz instalować modyfikację w swoim ulubionym C64, pamiętaj, że każda ingerencja w sprzęt może doprowadzić do jego nieumyślnego uszkodzenia.

Co będzie potrzebne do wykonania modyfikacji?

Komputer PC z USB, który pozwoli na zainstalowanie narzędzi z oficjalnej strony Arduino (https://www.arduino.cc/). Kluczowym elementem jest sam układ Arduino Pro Mini. Przy zakupie należy zwrócić uwagę na napięcie z jakim on pracuje. Istnieją dwie wersje: 3.3 V i 5 V. Ponieważ C64 również operuje na napięciu 5 V, koniecznie wybieramy tę właśnie wersję.

Pinouty Arduino

Do zaprogramowania układu będziemy również potrzebowali adaptera USB > RS-232 (nie pomylić z programatorem UART, który wygląda prawie identycznie). Polecam układy FDTI232, które bez problemu działają z najnowszymi systemami operacyjnymi oraz posiadają wyjście DTR, pozwalające automatycznie wywołać reset Arduino przed zaprogramowaniem. Niestety, większość dostępnych w Internecie porad o tym nie wspomina i każe ręcznie resetować układ przyciskiem, co potrafi doprowadzić do szewskiej pasji, kiedy po raz dwudziesty próbujemy w odpowiednim momencie wywołać reset przy próbie zaprogramowania.

Poza tymi dwoma układami potrzebne będzie 5 lub 6 kabelków do podłączenia wszystkich potrzebnych sygnałów zależnie od tego, czy chcemy również używać ROM selectora.

Programowanie układu

Po zainstalowaniu oprogramowania oraz sterowników adaptera, uruchamiamy Arduino IDE i wklejamy kod z listingu.

Podłączamy układ Arduino Pro Mini w następujący sposób:
- masa adaptera do masy Arduino,
- Vcc adaptera do Vcc Arduino,
- Rx adaptera do Tx Arduino,
- Tx adaptera do Rx Arduino,
- DTR adaptera do DTR lub Reset Arduino.

Następnie wybieramy odpowiedni układ z menu Narzędzia > Płytka... > Arduino Pro or Pro Mini; odpowiedni procesor: Narzędzia > Procesor... > Atmega 328p (5 V, 16 MHz) oraz programator: Narzędzia > Programator > AVRISP mk II. Jeśli wszystko poprawnie skonfigurowaliśmy i podłączyliśmy, po naciśnięciu przycisku „Wgraj Arduino” powinno kilka razy zamrugać diodami i środowisko powiadomi nas o sukcesie. Jeśli wystąpi jakiś błąd, upewnij się, że wszystkie poprzednie kroki zostały wykonane poprawnie.

Pobierz tutaj spakowany (.zip) wsad do Arduino dla projektu C64 Reset - 2,14 KB lub tutaj wersja niespakowana (plik .ino - 7,66 KB).

Instalacja

Teraz czas przejść do hardware’owej części rozwiązania. Musimy podłączyć układ według następującego schematu:

- Vcc z Arduino do +5 V na płycie C64,
- GND z Arduino do GND na płycie C64,
- linia A0 z Arduino do linii RESTORE na płycie C64,
- linia cyfrowa 3 do linii resetującej CPU na płycie C64,
- linia cyfrowa 4 do linii /EXROM na płycie C64,
- linia cyfrowa 5 do nóżki 27 pamięci EEPROM (opcjonalnie).

Brzmi skomplikowanie? Niestety jest to najcięższa część całej modyfikacji, a ponieważ istnieje wiele różnych wersji płyt głównych C64, bardzo prawdopodobne, że aby znaleźć odpowiednie sygnały, będzie trzeba sięgnąć po dokumentację serwisową. W każdym razie omówimy instalację bardziej szczegółowo na przykładzie dość często spotykanej wersji z C64C – Assy No. 250469 Rev. B.

Linia Reset w C64C

Linia EXROM w C64C

Linia Restore w C64C

5V i masa w C64C

Aby układ poprawnie działał, należy zasilić go napięciem 5 V, które możemy wziąć z wielu miejsc na płycie C64. Ja wykorzystałem dość wygodną lokalizację obok pinów diody POWER. Patrząc na płytę od strony z której zwykle użytkujemy Commodore, +5 V uzyskamy na pierwszym wolnym punkcie lutowniczym po lewej stronie od pinów. Tuż obok, na tej samej wysokości możemy także podłączyć masę. Warto potwierdzić właściwe sygnały sprawdzając je miernikiem.

Sygnał RESTORE jest również stosunkowo łatwy do znalezienia w tej wersji płyty. Znajdziemy go prawie na samej dolnej krawędzi płyty, na jednej z nóżek rezystora R17 (nóżka od strony kondensatora). Dlaczego akurat przycisk RESTORE? Ponieważ jest to jedyny przycisk na klawiaturze, którego sygnał jest bezpośrednio wyprowadzony na płytę, a nie jest kodowany.

Linia RESET znajduje się na anodzie diody CR5, nad ROM-em znaków. Niestety od góry nie da się łatwo przylutować tu przewodu, więc pozostaje albo diodę przemieścić, albo dostać się do tego punktu od spodu, jak też sam zrobiłem.

Najtrudniejsza w zlokalizowaniu była dla mnie linia /EXROM. W mojej wersji punkt był przykryty naklejką. Przy krawędzi płyty, pomiędzy PLA a VIC-II, znajduje się pięć punktów lutowniczych w szeregu. Patrząc od lewej strony, czwarty z nich to linia /EXROM.

Jeśli w swoim C64 posiadamy również podwójny ROM, możemy dodatkowo podłączyć do jednej z nóżek układu kolejny sygnał. W tej wersji programu można przełączać pomiędzy dwoma ROM-ami, ale łatwo można go rozszerzyć o obsługę czterech. Należy również pamiętać, że w starej wersji C64 Kernal i Basic zostały umieszczone w osobnych ROM-ach, a nie jak w C64C w jednym.

Jeśli wszystko zostało podłączone poprawnie, można przystąpić do testów.

Jak to działa?

Instalując modyfikację uzyskujemy kilka funkcji, zależnie od tego jak długo wciśniemy przycisk RESTORE. Wciskając go od dwóch do czterech sekund wyzwolimy tak zwany warm reset, który uruchomi procedurę startową BASIC-a. Jeśli to nie wystarczy, ponieważ np. część pamięci została nadpisana przez kod wczytany przez użytkownika, możemy przytrzymać RESTORE od czterech do siedmiu sekund, przez co wyzwolimy cold reset, czyli Commodore przejdzie przez całą procedurę startową systemu. Ta funkcjonalność działa tak samo, jak wciśnięcie przycisku reset na kartridżu.

Jeżeli mamy zainstalowany podwójny ROM, możemy przytrzymać RESTORE od siedmiu do dziesięciu sekund, aby poza cold resetem przełączyć również aktualnie używany ROM.

W celach kompatybilności z kartridżami dodałem również możliwość startowania z drugiego ROM-u. W tym celu wystarczy przytrzymać chwilkę RESTORE przy włączaniu C64.

I voila! W ten oto sposób wzbogaciliśmy nasze poczciwe C64 o bardzo brakujący mu odpowiednik CTRL+ALT+DELETE bez żadnego wiercenia lub niszczenia obudowy. Żeby rozwiązanie było ładniejsze i łatwe w ewentualnym demontażu, można się również pokusić o użycie goldpinów na płycie, zamiast bezpośredniego lutowania kabelków.

Gohanks